package com.yuju.init.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Component;

import com.alibaba.fastjson.JSONObject;
import com.yuju.account.model.ShiftModel;
import com.yuju.account.service.IShiftService;
import com.yuju.cache.RedisCache;
import com.yuju.constant.CacheKey;
import com.yuju.group.service.IHotelService;
import com.yuju.cache.RedisPluginInit;
import com.yuju.log.model.LogBizTypeModel;
import com.yuju.log.service.ILogBizTypeService;

/**
 * Created by xuehj on 2017/10/13 0013.
 * 此类由Spring容器负责实例化，可用作系统初始化
 */
@Component
public class SysInit implements ApplicationListener<ContextRefreshedEvent> {
	// 这里可以注入Service
    @Autowired
    private IHotelService hotelService;
    
    @Autowired
    private IShiftService shiftService;
    
    @Autowired
    private ILogBizTypeService logBizTypeService;
    
    private RedisCache simpleCache = RedisCache.getInstance();
    
    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {
    	// event.getApplicationContext().getDisplayName().equals("Root WebApplicationContext")
    	// 执行初始化
        if (event.getApplicationContext().getParent() == null) {
            System.out.println("================系统初始化=====================");
        	// 初始化系统缓存
        	initSysCache(event);
        	
        	// 初始化酒店班次信息
        	initClassNo();
        	
        	// 加载业务日志配置数据到系统缓存
        	initLogConfig();
        }
    }
    
    /**
     * 
     * 功能：初始化酒店班次信息<br/>
     *
     * @author xuehj
     * @Date 2017年12月19日 上午9:41:07 <br/>
     */
    private void initClassNo() {
        //初始化酒店的班次信息
        List<ShiftModel> shiftModelList = shiftService.getShiftIdFromDB(null);
        for (ShiftModel item:shiftModelList) {
            shiftService.setCurrentShiftToCache(item.getHotelId(), item);
        }
    }
    
    /**
     * 
     * 功能：初始化系统业务日志配置信息到系统缓存<br/>
     *
     * @author xuehj
     * @Date 2017年12月28日 下午2:47:57 <br/>
     */
    private void initLogConfig() {
    	List<LogBizTypeModel> list = logBizTypeService.list(null);
    	for (LogBizTypeModel model : list) {
    		RedisCache.getInstance().addCache(model.getCode() + CacheKey.KEY_CACHE_LOG_BIZ_TYPE, JSONObject.toJSONString(model));
    	}
    }
    
    /**
     * 
     * 功能：创建/初始 化系统缓存<br/>
     *
     * @author xuehj
     * @Date 2017年12月19日 上午9:42:03 <br/>
     */
    private void initSysCache(ContextRefreshedEvent event) {
    	String filter = event.getApplicationContext().getEnvironment().getProperty("spring.profiles.active");
    	RedisPluginInit.initCache(filter);
    }
}
